<?php

 // Carga de Queryx
 require_once("core/queryx.php");

 /**
  * ---------------------------------------------------------------
  * ASIGNATURA CLASE 
  * ---------------------------------------------------------------
  * Funciones necesarias relacionadas con el asignatura , esta clase necesita Queryx y esta a su vez
  * necesita de la clase Connectx (en la cual deben especificarse los parametros de conexión)
  * están localizadas en core.
  * 
  * @author Sergio Morlán Páramo
  */
 class Asignatura_class extends Queryx {

     private $id, $clave, $nombre, $descripcion, $area, $duracion;



     /**
      * ---------------------------------------------------------------
      * CONSTRUCTOR
      * ---------------------------------------------------------------
      * @param Int $id Identificador único del Objeto (PK)
      * @param Mixed $attr String (1) atributo o Array de Strings (varios) atributo(s) requeridos
      */
     public function __construct($id = FALSE, $attr=FALSE) {
         parent::__construct();
         if ($id)
             return $this->xget($id, FALSE, $attr);

     }




     /*
      * ---------------------------------------------------------------
      * SET METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Vamos a colocar el atributo id
      * @param String $id Attr
      */
     public function setid($id) {
         $this->id = $id;

     }




     /**
      * Vamos a colocar el atributo clave
      * @param String $clave Attr
      */
     public function setclave($clave) {
         $this->clave = $clave;

     }




     /**
      * Vamos a colocar el atributo nombre
      * @param String $nombre Attr
      */
     public function setnombre($nombre) {
         $this->nombre = $nombre;

     }




     /**
      * Vamos a colocar el atributo descripcion
      * @param String $descripcion Attr
      */
     public function setdescripcion($descripcion) {
         $this->descripcion = $descripcion;

     }




     /**
      * Vamos a colocar el atributo area
      * @param String $area Attr
      */
     public function setarea($area) {
         $this->area = $area;

     }




     /**
      * Vamos a colocar el atributo duracion
      * @param String $duracion Attr
      */
     public function setduracion($duracion) {
         $this->duracion = $duracion;

     }




     /*
      * ---------------------------------------------------------------
      * GET METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Vamos a obtener el atributoid
      * @return String $this->id
      */
     public function id() {
         return $this->id;

     }




     /**
      * Vamos a obtener el atributoclave
      * @return String $this->clave
      */
     public function clave() {
         return $this->clave;

     }




     /**
      * Vamos a obtener el atributonombre
      * @return String $this->nombre
      */
     public function nombre() {
         return $this->nombre;

     }




     /**
      * Vamos a obtener el atributodescripcion
      * @return String $this->descripcion
      */
     public function descripcion() {
         return $this->descripcion;

     }




     /**
      * Vamos a obtener el atributoarea
      * @return String $this->area
      */
     public function area() {
         return $this->area;

     }




     /**
      * Vamos a obtener el atributoduracion
      * @return String $this->duracion
      */
     public function duracion() {
         return $this->duracion;

     }




     /*
      * ---------------------------------------------------------------
      * BASIC METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Inserta en ASIGNATURA
      * Previamente colocados sus atributos con métodos Set
      *
      */
     public function xnew() {
         $query = "INSERT INTO `ASIGNATURA` (`id`, `clave`, `nombre`, `descripcion`, `area`, `duracion`) VALUES ('" . $this->id . "', '" . $this->clave . "', '" . $this->nombre . "', '" . $this->descripcion . "', '" . $this->area . "', '" . $this->duracion . "'); ";
         return $this->run_queryx($query);

     }




     /**
      * Actualiza todos los campos de ASIGNATURA
      * Previamente colocados sus atributos actualizados con métodos Set 
      *
      * @param int $idId de ASIGNATURA
      */
     public function xchange($id=FALSE) {
         if (!$id)
             $id = $this->id;$query = "UPDATE `ASIGNATURA` SET `clave` = '" . $this->clave . "', `nombre` = '" . $this->nombre . "', `descripcion` = '" . $this->descripcion . "', `area` = '" . $this->area . "', `duracion` = '" . $this->duracion . "' WHERE id = '" . $id . "';";
         return $this->run_queryx($query);

     }




     /**
      * Elimina definitivamente de la base de datos ASIGNATURA
      *
      * @param int $idId de ASIGNATURA
      */
     public function xdel($id=FALSE) {
         if (!$id)
             $id = $this->id;$query = "DELETE FROM `ASIGNATURA` WHERE `id` = '" . $id . "';";
         return $this->run_queryx($query);

     }




     /*
      * ---------------------------------------------------------------
      * SEARCH METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Busca y Devuleve un único registro en ASIGNATURA
      * @access private
      * @param int $idId de ASIGNATURA
      * @param int $field campo UNIQUE o PRIMARY KEY de ASIGNATURA
      */
     public function xget($id, $field=FALSE, $campos=FALSE) {
         $index = "id";
         $str_campos = "*";
         if ($field)
             $index = $field;
         if ($campos) {
             $str_campos = "`id`,";
             if (is_array($campos)) {
                 for ($i = 0; $i < count($campos); $i++) {
                     $str_campos .= "`" . $campos[$i] . "`";
                     if ($i < count($campos) - 1) {
                         $str_campos .=", ";
                     }
                 }
             } else {
                 $str_campos .= "`" . $campos . "` ";
             }
         }
         $query = "SELECT $str_campos FROM `ASIGNATURA` WHERE `$index` ='$id' LIMIT 1";
         $result = $this->run_queryx($query);
         if ($this->q_totalrows() > 0) {
             $this->xbinding($result);
             return TRUE;
         }
         return FALSE;

     }




     /**
      * Busca y Devuleve todos registro en ASIGNATURA
      * @param Array $campos Arreglo de los Campos a Seleccionar
      * @param String $filtro Cadena con los filtros para la búsqueda
      * @return Mixed
      */
     public function xgets($campos=FALSE, $filtro=FALSE, $order=FALSE) {
         $asignatura = NULL;
         $str_filtro = "";
         $str_order = "";
         $str_campos = "*";
         if ($campos) {
             $str_campos = "`id`,";
             if (is_array($campos)) {
                 for ($i = 0; $i < count($campos); $i++) {
                     $str_campos .= "`" . $campos[$i] . "`";
                     if ($i < count($campos) - 1) {
                         $str_campos .=", ";
                     }
                 }
             } else {
                 $str_campos .= "`" . $campos . "` ";
             }
         }
         if ($filtro)
             $str_filtro = "WHERE " . $filtro;
         if ($order)
             $str_order = "ORDER BY `" . $order . "`";
         $query = "SELECT $str_campos FROM `ASIGNATURA` $str_filtro $str_order;";
         $result = $this->run_queryx($query);
         if ($this->q_totalrows() > 0) {
             while ($row = mysql_fetch_array($result)) {
                 $asignatura[] = new Asignatura_class($row[0]);
             }
             return $asignatura;
         }
         return FALSE;

     }




     /*
      * ---------------------------------------------------------------
      * JOIN METHODS
      * ---------------------------------------------------------------
      */



     /*
      * ---------------------------------------------------------------
      * LEAVE METHODS
      * ---------------------------------------------------------------
      */

     /*
      * ---------------------------------------------------------------
      * BINDING METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Asignación Coloca todos los atributos del objeto encontrado mediante xget()
      * Sólo soporta un resultado
      * @access private
      * @param resource $query (query) SELECT sólo registro devuelto
      *
      */
     private function xbinding($query) {
         while ($row = mysql_fetch_array($query)) {
             $this->id = (isset($row["id"])) ? $row["id"] : NULL;
             $this->clave = (isset($row["clave"])) ? $row["clave"] : NULL;
             $this->nombre = (isset($row["nombre"])) ? $row["nombre"] : NULL;
             $this->descripcion = (isset($row["descripcion"])) ? $row["descripcion"] : NULL;
             $this->area = (isset($row["area"])) ? $row["area"] : NULL;
             $this->duracion = (isset($row["duracion"])) ? $row["duracion"] : NULL;
         }

     }




     /*
      * ---------------------------------------------------------------
      * OTHER METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Vamos a obtener el ultimo mayor registro en matricula de asignatura
      * @return int  
      */
     public function lastmax() {
         $query = "SELECT MAX(`id`) AS id FROM `ASIGNATURA`";
         $row = mysql_fetch_assoc($this->run_queryx($query));
         return $row["id"];

     }




     /**
      * Retorna el siguiente registro sugerido para matricula en asignatura
      * por default incrementará en 1 no es recomendable cambiar este parámetro
      * a menos que sea muy necesario
      * @param int $incremento Cuanto deseas incrementar al último registro obtenido
      * @return int El id (id) sugerido 
      */
     public function nextID($incremento = 1) {
         return $this->lastmax() + 1;

     }




     /*
      * ---------------------------------------------------------------
      * APP METHODS
      * ---------------------------------------------------------------
      * Métodos personalizados para la API de SISCC, no creados por el generador de código
      */
 }

 